id: task-76.1 title: Assess neo-neo-blessed API compatibility and differences status: Done assignee: [] created_date: '2025-06-16' updated_date: '2025-06-16' labels:
- research
- dependencies
- analysis dependencies: [] parent_task_id: task-76
Description
Conduct a thorough assessment of neo-neo-blessed to understand its API compatibility with the current blessed implementation and identify any breaking changes or differences that need to be addressed during migration.
This research phase will:
- Compare the APIs of blessed vs neo-neo-blessed
- Identify all current blessed usage patterns in the codebase
- Document any breaking changes or API differences
- Assess the impact on existing functionality
- Create a migration plan based on findings
Acceptance Criteria
- [x] Review neo-neo-blessed documentation and source code
- [x] Create a comprehensive list of all blessed API calls used in the project
- [x] Document any API differences between blessed and neo-neo-blessed
- [x] Identify potential breaking changes that will require code modifications
- [x] Test basic neo-neo-blessed functionality in a minimal example
- [x] Create a migration checklist of required changes
- [x] Document any features that may need alternative implementations
- [x] Assess impact on binary packaging and distribution
Assessment Report
Critical Finding: neo-neo-blessed does NOT support ESM
After thorough investigation, I discovered that neo-neo-blessed does not actually provide ESM support. The library still uses CommonJS modules, which contradicts the initial assumption about ESM migration benefits.
Key Findings:
-
Module System:
- neo-neo-blessed uses CommonJS (
require/module.exports) - No
"type": "module"in package.json - Main entry point is
./lib/blessed.js(CommonJS)
- neo-neo-blessed uses CommonJS (
-
API Compatibility:
- API appears to be 100% compatible with original blessed
- It's a maintenance fork focused on bug fixes
- No breaking changes documented
-
Dependencies:
- Includes
node-pty(v0.9.0) - has native compilation requirements - Includes
term.js(v0.0.7) - Installation issues on modern Node.js due to node-pty compilation
- Includes
-
Current Blessed Usage in Project:
- UI components: tui.ts, board.ts, task-viewer.ts, loading.ts, etc.
- Uses: screen, box, list, text, log widgets
- Features: scrolling, keyboard navigation, mouse support, styling
Migration Impact Assessment:
Pros of neo-neo-blessed:
- Bug fixes and maintenance updates
- Same API (no code changes needed)
- Active maintenance
Cons of neo-neo-blessed:
- ❌ No ESM support (main goal not achieved)
- ❌ No tree shaking benefits
- ❌ Still requires CJS workarounds
- ❌ Installation issues with native dependencies
- ❌ No reduction in bundle size
Recommendation: DO NOT MIGRATE
Since neo-neo-blessed does not provide the ESM support that was the primary motivation for this migration, I recommend not proceeding with this migration. The library offers no significant benefits over the current blessed implementation while introducing potential stability issues.
Alternative Options to Consider:
- Stay with current blessed: Continue using the existing blessed library with current workarounds
- Look for true ESM alternatives: Research other TUI libraries that genuinely support ESM
- Create ESM wrapper: Build an ESM wrapper around blessed (complex but maintains compatibility)
- Different TUI library: Consider completely different libraries like:
- ink (React-based, ESM support)
- terminal-kit (different API but ESM-ready)
- Custom implementation using ANSI escape codes
Next Steps:
Given these findings, we should:
- Close this migration effort as "Won't Do"
- Document the decision and rationale
- Consider alternative approaches if ESM support remains a priority